package com.qf.service.impl;

import com.qf.dao.CartDao;
import com.qf.dao.GoodsDao;
import com.qf.dao.impl.CartDaoImpl;
import com.qf.dao.impl.GoodsDaoImpl;
import com.qf.pojo.Cart;
import com.qf.pojo.Goods;
import com.qf.service.CartService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 29125
 * @version V1.0
 * @Project java2203
 * @Package com.qf.service.impl
 * @Description:
 * @Date 2022/5/25 10:48
 */
public class CartServiceImpl implements CartService {
    //调用dao层
    CartDao cartDao=new CartDaoImpl();
    //创建购物车
    @Override
    public boolean createCart(Integer uid, Integer pid) {
        //根据用户id uid ,商品id pid ，查询数据库是否有该商品
        Cart cart=cartDao.findCartByUidAndPid(uid,pid);
        //调用商品dao层，根据商品id查询商品
        GoodsDao goodsDao=new GoodsDaoImpl();
        Goods goods=goodsDao.findById(pid);
        if (cart!=null){
            //购物车存在该商品，该商品数量加1，对象放入购物车中，计算新的总价钱
            cart.setNum(cart.getNum()+1);
            cart.setGoods(goods);
            cart.setMoney(cart.getNum() * goods.getPrice());//购物车数量数量*物品单价

            //调用dao层方法，将数据更新到数据库表中
            cartDao.updateCart(cart);//新方法
        }else {
            //购物车不存在该商品，添加该商品
            cart=new Cart();//购物车创建新的对象
            //用户id,商品id,商品数量，存入购物车，新的总价
            cart.setUid(uid);
            cart.setPid(pid);
            cart.setNum(1);
            cart.setGoods(goods);
            cart.setMoney(cart.getNum() * goods.getPrice());

            //调用dao层，添加商品
            cartDao.insertCart(cart);
        }
        return true;//返回结果 boolean 类型，

    }
    //根据用户id查询购物车集合
    @Override
    public List<Cart> findCartListByUid(Integer uid) {
        //调用dao方法
        List<Cart> cartList = cartDao.findCartListByUid(uid);
        //调用商品dao查询所有商品
        GoodsDao goodsDao=new GoodsDaoImpl();
        List<Goods> goodsList=goodsDao.findGoodsAll();
        //好理解但效率慢做法  遍历次数=cartList集合个数 * goodsList集合个数
//        if (cartList!=null){
//            //遍历cartList
//            for (Cart cart : cartList) {
//                //遍历goodsList
//                for (Goods goods : goodsList) {
//                    if (cart.getPid()==goods.getId()){
//                        //购物车id和商品id相等，将商品对象放入购物车对象中
//                        cart.setGoods(goods);
//                    }
//                }
//            }
//        }

        //优化：遍历次数=cartList集合个数 + goodsList集合个数  一个集合遍历另一个集合
        Map<String,Goods> goodsMap=new HashMap<String, Goods>();
        //遍历商品集合
        if (goodsList!=null){
            for (Goods goods : goodsList) {
                //map键值对形式，商品id为key，商品对象为value
                goodsMap.put(String.valueOf(goods.getId()),goods);
            }
        }
        //遍历购物车集合
        if (cartList!=null){
            for (Cart cart : cartList) {
                Goods goods = goodsMap.get(String.valueOf(cart.getPid()));
                if (goods!=null){
                    //商品对象不为空，放入购物车对象中
                    cart.setGoods(goods);
                }
            }
        }

        return null;
    }
    //修改购物车
    @Override
    public void updateCart(Integer cid, Integer num) {
        //调用dao层方法 查询购物车的id  cid
        Cart cart= cartDao.findById(cid);
        //商品的dao层  查询购物车中的商品的id  pid
        GoodsDao goodsDao=new GoodsDaoImpl();
        Goods goods=goodsDao.findById(cart.getPid());

        //计算总价钱=商品单价*商品数量
        cart.setNum(num);
        cart.setGoods(goods);
        cart.setMoney(goods.getPrice()*num);
        cartDao.updateCart(cart);

    }
    //根据id删除
    @Override
    public void deleteById(Integer id) {
        cartDao.deleteById(id);
    }
}
